package com.zenithmind.mall.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 商品SEO信息实体 - 遵循单一职责原则，专门管理SEO相关信息
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("mall_product_seo")
public class ProductSeo extends BaseEntity {

    /**
     * 商品ID
     */
    private String productId;

    /**
     * SEO标题
     */
    private String seoTitle;

    /**
     * SEO关键词
     */
    private String keywords;

    /**
     * SEO描述
     */
    private String seoDescription;

    /**
     * 页面URL（友好URL）
     */
    private String pageUrl;

    /**
     * 元标签
     */
    private String metaTags;

    /**
     * 结构化数据（JSON-LD格式）
     */
    private String structuredData;

    /**
     * 是否启用SEO优化
     */
    private Integer seoEnabled;

    // 业务方法

    /**
     * 检查SEO是否启用
     */
    public boolean isSeoEnabled() {
        return this.seoEnabled != null && this.seoEnabled == 1;
    }

    /**
     * 启用SEO
     */
    public void enableSeo() {
        this.seoEnabled = 1;
    }

    /**
     * 禁用SEO
     */
    public void disableSeo() {
        this.seoEnabled = 0;
    }

    /**
     * 检查是否有有效的SEO标题
     */
    public boolean hasValidSeoTitle() {
        return seoTitle != null && !seoTitle.trim().isEmpty() && seoTitle.length() <= 60;
    }

    /**
     * 检查是否有有效的SEO描述
     */
    public boolean hasValidSeoDescription() {
        return seoDescription != null && !seoDescription.trim().isEmpty() && 
               seoDescription.length() >= 120 && seoDescription.length() <= 160;
    }

    /**
     * 检查是否有有效的关键词
     */
    public boolean hasValidKeywords() {
        return keywords != null && !keywords.trim().isEmpty();
    }

    /**
     * 获取关键词数组
     */
    public String[] getKeywordArray() {
        if (keywords == null || keywords.trim().isEmpty()) {
            return new String[0];
        }
        return keywords.split("[,，;；\\s]+");
    }

    /**
     * 设置关键词数组
     */
    public void setKeywordArray(String[] keywordArray) {
        if (keywordArray != null && keywordArray.length > 0) {
            this.keywords = String.join(",", keywordArray);
        } else {
            this.keywords = null;
        }
    }

    /**
     * 生成默认的友好URL
     */
    public String generateDefaultPageUrl(String productName, String productId) {
        if (productName == null || productName.trim().isEmpty()) {
            return "/product/" + productId;
        }
        
        // 简单的URL友好化处理
        String friendlyName = productName.toLowerCase()
            .replaceAll("[^a-z0-9\\u4e00-\\u9fa5]", "-")
            .replaceAll("-+", "-")
            .replaceAll("^-|-$", "");
        
        return "/product/" + friendlyName + "-" + productId;
    }

    /**
     * 验证SEO数据完整性
     */
    public boolean isValid() {
        return productId != null && !productId.trim().isEmpty();
    }

    /**
     * 检查SEO配置是否完整
     */
    public boolean isCompleteConfiguration() {
        return hasValidSeoTitle() && 
               hasValidSeoDescription() && 
               hasValidKeywords() &&
               pageUrl != null && !pageUrl.trim().isEmpty();
    }

    /**
     * 获取SEO配置完整度评分（0-100）
     */
    public int getSeoScore() {
        int score = 0;
        
        if (hasValidSeoTitle()) score += 25;
        if (hasValidSeoDescription()) score += 25;
        if (hasValidKeywords()) score += 20;
        if (pageUrl != null && !pageUrl.trim().isEmpty()) score += 15;
        if (metaTags != null && !metaTags.trim().isEmpty()) score += 10;
        if (structuredData != null && !structuredData.trim().isEmpty()) score += 5;
        
        return score;
    }
}
